package com.ceair.authorization.handler;

import com.ceair.config.MyUrlConfig;
import com.ceair.entity.model.Result;
import com.ceair.util.JsonUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.MediaType;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.util.UrlUtils;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * @author wangbaohai
 * @ClassName DeviceVerificationResponseHandler
 * @description: 校验设备码成功响应类
 * @date 2024年11月21日
 * @version: 1.0.0
 */
public class DeviceVerificationResponseHandler implements AuthenticationSuccessHandler {

    /**
     * 当用户成功认证时调用此方法来处理成功的认证结果
     *
     * @param request   HTTP请求对象，包含请求相关的信息
     * @param response  HTTP响应对象，用于向客户端发送响应
     * @param authentication 认证对象，包含用户认证信息
     * @throws IOException 如果在处理过程中发生I/O错误
     */
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                        Authentication authentication) throws IOException {
        // 判断设备激活的URL是否为绝对路径
        if (UrlUtils.isAbsoluteUrl(MyUrlConfig.DEVICE_ACTIVATED_URI)) {
            // 如果是绝对路径，创建一个成功结果对象，并设置相应的内容类型和编码方式
            Result<Object> result = Result.success(MyUrlConfig.DEVICE_ACTIVATED_URI);
            response.setCharacterEncoding(StandardCharsets.UTF_8.name());
            response.setContentType(MediaType.APPLICATION_JSON_VALUE);
            // 将结果对象转换为JSON格式并写入响应体中
            response.getWriter().write(JsonUtils.objectCovertToJson(result));
            response.getWriter().flush();
        } else {
            // 如果不是绝对路径，直接重定向到设备激活的页面
            response.sendRedirect(MyUrlConfig.DEVICE_ACTIVATED_URI);
        }
    }

}
